# Лекция: Проверяемые и непроверяемые исключения в Java

В Java исключения делятся на две категории: проверяемые (checked) и непроверяемые (unchecked).

## Проверяемые исключения

Проверяемые исключения - это исключения, которые требуют явной обработки. Если в вашем коде может возникнуть проверяемое исключение, вы должны либо обработать его с помощью блока `try-catch`, либо объявить его в сигнатуре метода с помощью оператора `throws`.

Примеры проверяемых исключений в Java: `IOException`, `FileNotFoundException`, `ClassNotFoundException`.

## Непроверяемые исключения

Непроверяемые исключения, также известные как исключения времени выполнения, не требуют явной обработки. Они обычно возникают из-за ошибок в вашем коде.

Примеры непроверяемых исключений в Java: `NullPointerException`, `ArrayIndexOutOfBoundsException`, `ArithmeticException`.

---

# Практические задания

1. **Создайте метод, который вызывает проверяемое исключение, и обработайте это исключение.** (Сложность: 2/5)
```java
void readFile(String filename) {
    try {
        FileReader reader = new FileReader(filename);
    } catch (FileNotFoundException e) {
        System.out.println("Файл не найден");
    }
}
```

2. **Создайте метод, который вызывает непроверяемое исключение, и обработайте это исключение.** (Сложность: 1/5)
```java
void divide(int a, int b) {
    try {
        System.out.println(a / b);
    } catch (ArithmeticException e) {
        System.out.println("Деление на ноль невозможно");
    }
}
```

3. **Создайте метод, который вызывает проверяемое исключение, и объявите это исключение в сигнатуре метода.** (Сложность: 2/5)
```java
void readFile(String filename) throws FileNotFoundException {
    FileReader reader = new FileReader(filename);
}
```

4. **Создайте метод, который вызывает непроверяемое исключение, и не обрабатывайте это исключение.** (Сложность: 1/5)
```java
void divide(int a, int b) {
    System.out.println(a / b);
}
```

5. **Создайте метод, который вызывает и проверяемое, и непроверяемое исключения, и обработайте оба исключения.** (Сложность: 3/5)
```java
void readFileAndDivide(String filename, int a, int b) {
    try {
        FileReader reader = new FileReader(filename);
        System.out.println(a / b);
    } catch (FileNotFoundException e) {
        System.out.println("Файл не найден");
    } catch (ArithmeticException e) {
        System.out.println("Деление на ноль невозможно");
    }
}
```